<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>prototype</title>
</head>
<body>
<script>
    /*
    ① 每个对象都有一个隐式的属性(__proto__),属性值本质上就是一个普通的对象
    ② 每个函数对象都有一个原型属性(prototype),属性值本质上就是一个普通的对象
    ③ 每个对象的__proto__指向构造函数的原型对象(prototype)
    ④ 原型对象上有constrctor属性,指向构造函数
* */

    function Fun() {
        // this.run = 2 //第2个找
        this.aa = 2 //第2个找
    }
    console.log(Fun.prototype);
    Fun.prototype.run = 4  //第四个找
    var fun = new Fun();
    // fun.run = 1;  //第一个找
    // fun.run2 = 3;  //第一个找
    fun.__proto__.run = 3;  //第三个找
    Fun.prototype.run = 4  //第四个找
   // Object.__proto__.run = 5 ; //第五个找
    console.log(fun.run);
    console.log(fun.aa);
    console.log(Object.__proto__.run);
    console.log(fun);

    /*
    *
    *   原形是用来解决共享属性和共享方法的
        原型链最终的指向是Object的prototype, 而Object中的__proto__是null
        查找顺序: 对象本身查找==>构造函数中查找==>对象原形==>构造函数的原形中==>当前原形的原形中查找
        *
        *
        *

* */


</script>
</body>
</html>
